#pragma once

typedef struct margin
{
	int left;
	int top;
	int right;
	int bottom;
} MARGIN;

typedef enum 
{
	TINY, // H6
	SMALL, 
	NORMAL, 
	BIG, 
	LARGE,
	LARGEST // H1

} EM_FONT_SIZE;

typedef unsigned int RGBREF;

class CThemeBase
{
public:
	CThemeBase(void);
	virtual ~CThemeBase(void);

	virtual CFont* GetFont(EM_FONT_SIZE ft_sel=NORMAL) = 0;
	virtual RGBREF GetFrontColor() = 0;
	virtual RGBREF GetBKColor() = 0;

	virtual int GetScanPitch() = 0;
	virtual MARGIN GetMargin() = 0;
	virtual MARGIN GetMarginOut() = 0;
};

class CXPTheme : public CThemeBase
{

};

class CMacOSTheme : public CThemeBase
{
};

class CCustemTheme : public CThemeBase
{
public:
	CFont* GetFont(EM_FONT_SIZE ft_sel = NORMAL )
	{
		int i = 0;
		switch(ft_sel)
		{
		case TINY:
			break;
		case SMALL:
			break;
		case NORMAL:
			break;
		case BIG:
			break;
		case LARGE:
			break;
		case LARGEST:
			break;
		default:
			break;
		}
		return font[i];
	}
	RGBREF GetFrontColor()
	{
		return RGB(0,0,0);
	}
	RGBREF GetBKColor()
	{
		return RGB(180,180,180);
	};

	int GetScanPitch()
	{
		return 20;
	};
	MARGIN GetMargin()
	{
		MARGIN mar = {10,10,10,10};
		return mar;
	};
	MARGIN GetMarginOut()
	{
		MARGIN mar = {10,10,10,10};
		return mar;
	};

protected:
	CFont* font[6];
};

class CXmlTheme : public CThemeBase
{
};

static CThemeBase* g_Theme;
CFont* GetFont();
RGBREF GetFrontColor();
RGBREF GetBKColor();

int LoadTheme(CThemeBase* theme)
{
	if (NULL == theme)
		return -1;
	g_Theme = theme;
	return 0;
};

#if 0
int main()
{
	CCustemTheme theme;
	LoadTheme(&theme);

	GetFont();
	theme.GetMargin();
}
#endif